#ifndef SEMANTICNODEPROPERTY_H_
#define SEMANTICNODEPROPERTY_H_

#include "SemanticNode.h"
#include "ValueType.h"

#include "../main_container.h"

#include <string>
#include <sstream>
#include <vector>

extern MainContainer *compilerData;
class SemanticNodeMethodBody;

class SemanticNodeProperty : public SemanticNode, public ValueType {
private:

	bool modPublic;
	bool modProtected;
	bool modPrivate;
	bool modStatic;
	bool modAbstract;
	bool modOverride;
	bool modVirtual;
	bool modFinal;

	SemanticNodeMethodBody *readNode;
	SemanticNodeMethodBody *writeNode;

	std::string name;

	void addPropertyMods(const SyntaxTreeNode *propertyMods);


public:
	SemanticNodeProperty(const SyntaxTreeNode *syntaxNode, SemanticNode *parent);
	~SemanticNodeProperty();

	std::string getName();
	std::string toDebugString(int tab);

	bool getIsPublic();
	bool getIsProtected();
	bool getIsPrivate();
	bool getIsStatic();
	bool getIsAbstract();
	bool getIsOverride();
	bool getIsVirtual();
	bool getIsFinal();
	SemanticNodeMethodBody *getReadNode();
	SemanticNodeMethodBody *getWriteNode();

};

#endif /* SEMANTICNODEPROPERTY_H_ */
